<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Dynamic program analysis</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Dynamic_program_analysis"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Dynamic_program_analysis rootpage-Dynamic_program_analysis skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Dynamic program analysis</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1305433154">
/* start https://en.wikipedia.org/ */
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style>
<style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1246091330">
/* start https://en.wikipedia.org/ */
.mw-parser-output .sidebar{width:22em;float:right;clear:right;margin:0.5em 0 1em 1em;background:var(--background-color-neutral-subtle,#f8f9fa);border:1px solid var(--border-color-base,#a2a9b1);padding:0.2em;text-align:center;line-height:1.4em;font-size:88%;border-collapse:collapse;display:table}body.skin-minerva .mw-parser-output .sidebar{display:table!important;float:right!important;margin:0.5em 0 1em 1em!important}.mw-parser-output .sidebar-subgroup{width:100%;margin:0;border-spacing:0}.mw-parser-output .sidebar-left{float:left;clear:left;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-none{float:none;clear:both;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-outer-title{padding:0 0.4em 0.2em;font-size:125%;line-height:1.2em;font-weight:bold}.mw-parser-output .sidebar-top-image{padding:0.4em}.mw-parser-output .sidebar-top-caption,.mw-parser-output .sidebar-pretitle-with-top-image,.mw-parser-output .sidebar-caption{padding:0.2em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-pretitle{padding:0.4em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-title,.mw-parser-output .sidebar-title-with-pretitle{padding:0.2em 0.8em;font-size:145%;line-height:1.2em}.mw-parser-output .sidebar-title-with-pretitle{padding:0.1em 0.4em}.mw-parser-output .sidebar-image{padding:0.2em 0.4em 0.4em}.mw-parser-output .sidebar-heading{padding:0.1em 0.4em}.mw-parser-output .sidebar-content{padding:0 0.5em 0.4em}.mw-parser-output .sidebar-content-with-subgroup{padding:0.1em 0.4em 0.2em}.mw-parser-output .sidebar-above,.mw-parser-output .sidebar-below{padding:0.3em 0.8em;font-weight:bold}.mw-parser-output .sidebar-collapse .sidebar-above,.mw-parser-output .sidebar-collapse .sidebar-below{border-top:1px solid #aaa;border-bottom:1px solid #aaa}.mw-parser-output .sidebar-navbar{text-align:right;font-size:115%;padding:0 0.4em 0.4em}.mw-parser-output .sidebar-list-title{padding:0 0.4em;text-align:left;font-weight:bold;line-height:1.6em;font-size:105%}.mw-parser-output .sidebar-list-title-c{padding:0 0.4em;text-align:center;margin:0 3.3em}@media(max-width:640px){body.mediawiki .mw-parser-output .sidebar{width:100%!important;clear:both;float:none!important;margin-left:0!important;margin-right:0!important}}body.skin--responsive .mw-parser-output .sidebar a>img{max-width:none!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle a{color:var(--color-progressive)!important}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle a{color:var(--color-progressive)!important}}@media print{body.ns-0 .mw-parser-output .sidebar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><table class="sidebar nomobile nowraplinks"><tbody><tr><th class="sidebar-title"><a href="Execution_(computing)" title="Execution (computing)">Program execution</a></th></tr><tr><th class="sidebar-heading">
General concepts</th></tr><tr><td class="sidebar-content hlist">
<ul><li><a href="Computer_program" title="Computer program">Code</a></li>
<li><a href="Translator_(computing)" title="Translator (computing)">Translation</a>
<ul><li><a href="Compiler" title="Compiler">Compiler</a></li>
<li><a href="Compile_time" title="Compile time">Compile time</a></li>
<li><a href="Optimizing_compiler" title="Optimizing compiler">Optimizing compiler</a></li></ul></li>
<li><a href="Linker_(computing)" title="Linker (computing)"> Linking</a></li>
<li><a href="Execution_(computing)" title="Execution (computing)">Execution</a>
<ul><li><a href="Runtime_system" title="Runtime system">Runtime system</a></li>
<li><a href="Executable" title="Executable">Executable</a></li>
<li><a href="Interpreter_(computing)" title="Interpreter (computing)">Interpreter</a></li>
<li><a href="Virtual_machine" title="Virtual machine">Virtual machine</a></li></ul></li>
<li><a href="Intermediate_representation" title="Intermediate representation">Intermediate representation</a> (IR)</li></ul></td>
</tr><tr><th class="sidebar-heading">
Types of code</th></tr><tr><td class="sidebar-content hlist">
<ul><li><a href="Source_code" title="Source code">Source code</a></li>
<li><a href="Object_code" title="Object code">Object code</a></li>
<li><a href="Bytecode" title="Bytecode">Bytecode</a></li>
<li><a href="Machine_code" title="Machine code">Machine code</a></li>
<li><a href="Microcode" title="Microcode">Microcode</a></li></ul></td>
</tr><tr><th class="sidebar-heading">
Compilation strategies</th></tr><tr><td class="sidebar-content hlist">
<ul><li><a href="Ahead-of-time_compilation" title="Ahead-of-time compilation">Ahead-of-time</a> (AOT)</li>
<li><a href="Just-in-time_compilation" title="Just-in-time compilation">Just-in-time</a> (JIT)
<ul><li><a href="Tracing_just-in-time_compilation" title="Tracing just-in-time compilation">Tracing just-in-time</a></li>
<li><a href="Compile_and_go_system" title="Compile and go system">Compile and go system</a></li></ul></li>
<li><a href="Precompilation" class="mw-redirect" title="Precompilation">Precompilation</a></li>
<li><a href="Source-to-source_compiler" title="Source-to-source compiler">Transcompilation</a></li>
<li><a href="Dynamic_recompilation" title="Dynamic recompilation">Recompilation</a></li></ul></td>
</tr><tr><th class="sidebar-heading">
Notable runtimes</th></tr><tr><td class="sidebar-content hlist">
<ul><li><a href="Android_Runtime" title="Android Runtime">Android Runtime</a> (ART)</li>
<li><a href="BEAM_(Erlang_virtual_machine)" title="BEAM (Erlang virtual machine)">BEAM</a> (Erlang)</li>
<li><a href="Common_Language_Runtime" title="Common Language Runtime">Common Language Runtime</a> (CLR) and <a href="Mono_(software)#Code_Execution_Engine" title="Mono (software)">Mono</a></li>
<li><a href="CPython" title="CPython">CPython</a> and <a href="PyPy" title="PyPy">PyPy</a></li>
<li><a href="Crt0" title="Crt0">crt0</a> (<a href="C_(programming_language)" title="C (programming language)">C</a> target-specific initializer)</li>
<li><a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a> (JVM)</li>
<li><a href="LuaJIT" title="LuaJIT">LuaJIT</a></li>
<li><a href="Objective-C" title="Objective-C">Objective-C</a> and <a href="Swift_(programming_language)" title="Swift (programming language)">Swift</a>'s</li>
<li><a href="V8_(JavaScript_engine)" title="V8 (JavaScript engine)">V8</a> and <a href="Node.js" title="Node.js">Node.js</a></li>
<li><a href="Zend_Engine" title="Zend Engine">Zend Engine</a> (PHP)</li></ul></td>
</tr><tr><th class="sidebar-heading">
Notable compilers & toolchains</th></tr><tr><td class="sidebar-content hlist">
<ul><li><a href="GNU_Compiler_Collection" title="GNU Compiler Collection">GNU Compiler Collection</a> (GCC)</li>
<li><a href="LLVM" title="LLVM">LLVM</a> and <a href="Clang" title="Clang">Clang</a></li>
<li><a href="Microsoft_Visual_C%2B%2B" title="Microsoft Visual C++">MSVC</a></li>
<li><a href="Glasgow_Haskell_Compiler" title="Glasgow Haskell Compiler">Glasgow Haskell Compiler</a> (GHC)</li></ul></td>
</tr><tr><td class="sidebar-navbar"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></td></tr></tbody></table>
<p><b>Dynamic program analysis</b> is the act of <a href="Program_analysis_(computer_science)" class="mw-redirect" title="Program analysis (computer science)">analyzing software</a> that involves executing a <a href="Computer_program" title="Computer program">program</a> – as opposed to <a href="Static_program_analysis" title="Static program analysis">static program analysis</a>, which does not execute it.
</p><p>Analysis can focus on different aspects of the software including but not limited to: <a href="Behavior" title="Behavior">behavior</a>, <a href="Test_coverage" class="mw-redirect" title="Test coverage">test coverage</a>, <a href="Software_performance" class="mw-redirect" title="Software performance">performance</a> and <a href="Security" title="Security">security</a>.
</p><p>To be effective, the target program must be executed with sufficient test inputs<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> to address the ranges of possible inputs and outputs. <a href="Software_testing" title="Software testing">Software testing</a> measures, such as <a href="Code_coverage" title="Code coverage">code coverage</a>, and tools such as <a href="Mutation_testing" title="Mutation testing">mutation testing</a>, are used to identify where testing is inadequate.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Types">Types</h2></div>
<div class="mw-heading mw-heading3"><h3 id="Functional_testing">Functional testing</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Software_testing" title="Software testing">Software testing</a></div>
<p>Functional testing includes relatively common <a href="Computer_programming" title="Computer programming">programming</a> techniques such as <a href="Unit_testing" title="Unit testing">unit testing</a>, <a href="Integration_testing" title="Integration testing">integration testing</a> and <a href="System_testing" title="System testing">system testing</a>.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Code_coverage">Code coverage</h3></div>
<p>Computing the <a href="Code_coverage" title="Code coverage">code coverage</a> of a test identifies code that is not tested; not covered by a test.
</p><p>Although this analysis identifies code that is not tested it does not determine whether tested coded is <i>adequately</i> tested. Code can be executed even if the tests do not actually verify correct behavior.
</p>
<ul><li><a href="Gcov" title="Gcov">Gcov</a> is the <a href="GNU" title="GNU">GNU</a> source code coverage program.</li>
<li><a href="VB_Watch" title="VB Watch">VB Watch</a> injects dynamic analysis code into Visual Basic programs to monitor <a href="Code_coverage" title="Code coverage">code coverage</a>, call stack, execution trace, instantiated objects and variables.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Dynamic_testing">Dynamic testing</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Dynamic_testing" title="Dynamic testing">Dynamic testing</a></div>
<p>Dynamic testing involves executing a program on a set of test cases.
</p>
<div class="mw-heading mw-heading3"><h3 id="Memory_error_detection">Memory error detection</h3></div>
<ul><li><a href="AddressSanitizer" class="mw-redirect" title="AddressSanitizer">AddressSanitizer</a>: Memory error detection for Linux, <a href="MacOS" title="MacOS">macOS</a>, Windows, and more. Part of <a href="LLVM" title="LLVM">LLVM</a>.</li>
<li><a href="BoundsChecker" title="BoundsChecker">BoundsChecker</a>: Memory error detection for Windows based applications. Part of <a href="Micro_Focus" title="Micro Focus">Micro Focus</a> <a href="DevPartner" title="DevPartner">DevPartner</a>.</li>
<li><a href="Dmalloc" title="Dmalloc">Dmalloc</a>: Library for checking memory allocation and leaks. Software must be recompiled, and all files must include the special C header file dmalloc.h.</li>
<li><a href="Intel_Inspector" title="Intel Inspector">Intel Inspector</a>: Dynamic memory error debugger for C, C++, and Fortran applications that run on <a href="Windows" class="mw-redirect" title="Windows">Windows</a> and <a href="Linux" title="Linux">Linux</a>.</li>
<li><a href="IBM_Rational_Purify" class="mw-redirect" title="IBM Rational Purify">Purify</a>: Mainly <a href="Storage_violation" title="Storage violation">memory corruption</a> detection and memory leak detection.</li>
<li><a href="Valgrind" title="Valgrind">Valgrind</a>: Runs programs on a virtual processor and can detect memory errors (e.g., misuse of <a href="Malloc" class="mw-redirect" title="Malloc">malloc</a> and <a href="Free_(programming)" class="mw-redirect" title="Free (programming)">free</a>) and <a href="Race_conditions" class="mw-redirect" title="Race conditions">race conditions</a> in <a href="Multithreading_(software)" class="mw-redirect" title="Multithreading (software)">multithread</a> programs.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Fuzzing">Fuzzing</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Fuzzing" title="Fuzzing">Fuzzing</a></div>
<p>Fuzzing is a testing technique that involves executing a program on a wide variety of inputs; often these inputs are randomly generated (at least in part). <a href="Fuzzing#Types" title="Fuzzing">Gray-box fuzzers</a> use code coverage to guide input generation.
</p>
<div class="mw-heading mw-heading3"><h3 id="Dynamic_symbolic_execution">Dynamic symbolic execution</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Concolic_testing" title="Concolic testing">Concolic testing</a></div>
<p>Dynamic symbolic execution (also known as <i>DSE</i> or concolic execution) involves executing a test program on a concrete input, collecting the path constraints associated with the execution, and using a <a href="Constraint_solver" class="mw-redirect" title="Constraint solver">constraint solver</a> (generally, an <a href="SMT_solver" class="mw-redirect" title="SMT solver">SMT solver</a>) to generate new inputs that would cause the program to take a different control-flow path, thus increasing code coverage of the test suite.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> DSE can be considered a type of <a href="#Fuzzing">fuzzing</a> ("white-box" fuzzing).
</p>
<div class="mw-heading mw-heading3"><h3 id="Dynamic_data-flow_analysis">Dynamic data-flow analysis</h3></div>
<p>Dynamic data-flow analysis tracks the flow of information from <i>sources</i> to <i>sinks</i>. Forms of dynamic data-flow analysis include dynamic taint analysis and even <a href="#Dynamic_symbolic_execution">dynamic symbolic execution</a>.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Invariant_inference">Invariant inference</h3></div>
<p><a href="Daikon_(system)" title="Daikon (system)">Daikon</a> is an implementation of dynamic invariant detection. Daikon runs a program, observes the values that
the program computes, and then reports properties that were true over the observed executions, and thus likely true over all executions.
</p>
<div class="mw-heading mw-heading3"><h3 id="Security_analysis">Security analysis</h3></div>
<p>Dynamic analysis can be used to detect security problems.
</p>
<ul><li><a href="IBM_Rational_AppScan" class="mw-redirect" title="IBM Rational AppScan">IBM Rational AppScan</a> is a suite of application security solutions targeted for different stages of the development lifecycle. The suite includes two main dynamic analysis products: IBM Rational AppScan Standard Edition, and IBM Rational AppScan Enterprise Edition. In addition, the suite includes IBM Rational AppScan Source Edition—a static analysis tool.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Concurrency_errors">Concurrency errors</h3></div>
<ul><li><a href="Parasoft" title="Parasoft">Parasoft</a> <a href="Jtest" title="Jtest">Jtest</a> uses runtime error detection to expose defects such as <a href="Race_conditions" class="mw-redirect" title="Race conditions">race conditions</a>, exceptions, resource and memory leaks, and security attack vulnerabilities.</li>
<li><a href="Intel_Inspector" title="Intel Inspector">Intel Inspector</a> performs run-time threading and memory error analysis in Windows.</li>
<li><a href="Parasoft" title="Parasoft">Parasoft</a> <a href="Insure%2B%2B" title="Insure++">Insure++</a> is a runtime memory analysis and error detection tool. Its Inuse component provides a graphical view of memory allocations over time, with specific visibility of overall heap usage, block allocations, possible outstanding leaks, etc.</li>
<li><a href="Google's" class="mw-redirect" title="Google's">Google's</a> Thread Sanitizer is a data race detection tool. It instruments <a href="LLVM" title="LLVM">LLVM</a> IR to capture racy memory accesses.</li></ul>
<div class="mw-heading mw-heading3"><h3 id="Program_slicing">Program slicing</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Main article: <a href="Program_slicing" title="Program slicing">Program slicing</a></div>
<p>For a given subset of a program’s behavior, program slicing consists of reducing the program to the minimum form that still produces the selected behavior. The reduced program is called a “slice” and is a faithful representation of the original program within the domain of the specified behavior subset.
Generally, finding a slice is an unsolvable problem, but by specifying the target behavior subset by the values of a set of variables, it is possible to obtain approximate slices using a data-flow algorithm. These slices are usually used by developers during debugging to locate the source of errors.
</p>
<div class="mw-heading mw-heading3"><h3 id="Performance_analysis">Performance analysis</h3></div>
<p>Most <a href="List_of_performance_analysis_tools" title="List of performance analysis tools">performance analysis tools</a> use dynamic program analysis techniques.
</p>
<div class="mw-heading mw-heading2"><h2 id="Techniques">Techniques</h2></div>
<p>Most dynamic analysis involves <a href="Instrumentation_(computer_programming)" title="Instrumentation (computer programming)">instrumentation</a> or transformation.
</p><p>Since instrumentation can affect runtime performance, interpretation of test results must account for this to avoid misidentifying a performance problem.
</p>
<div class="mw-heading mw-heading3"><h3 id="Examples">Examples</h3></div>
<p>DynInst is a runtime code-patching library that is useful in developing dynamic program analysis probes and applying them to compiled executables. Dyninst does not require <a href="Source_code" title="Source code">source code</a> or recompilation in general, however, non-stripped executables and executables with debugging symbols are easier to instrument.
</p><p><a rel="nofollow" class="external text" href="https://maierfelix.github.io/Iroh/">Iroh.js</a> is a runtime code analysis library for <a href="JavaScript" title="JavaScript">JavaScript</a>. It keeps track of the code execution path, provides runtime listeners to listen for specific executed code patterns and allows the interception and manipulation of the program's execution behavior.
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<ul><li><a href="Abstract_interpretation" title="Abstract interpretation">Abstract interpretation</a></li>
<li><a href="Daikon_(system)" title="Daikon (system)">Daikon</a></li>
<li><a href="Dynamic_load_testing" title="Dynamic load testing">Dynamic load testing</a></li>
<li><a href="Profiling_(computer_programming)" title="Profiling (computer programming)">Profiling (computer programming)</a></li>
<li><a href="Runtime_verification" title="Runtime verification">Runtime verification</a></li>
<li><a href="Program_analysis_(computer_science)" class="mw-redirect" title="Program analysis (computer science)">Program analysis (computer science)</a></li>
<li><a href="Static_code_analysis" class="mw-redirect" title="Static code analysis">Static code analysis</a></li>
<li><a href="Time_Partition_Testing" class="mw-redirect" title="Time Partition Testing">Time Partition Testing</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite id="CITEREFKhatiwadaTushevMahmoud2018" class="citation journal cs1">Khatiwada, Saket; Tushev, Miroslav; Mahmoud, Anas (2018-01-01). <span class="id-lock-subscription" title="Paid subscription required"><a rel="nofollow" class="external text" href="https://linkinghub.elsevier.com/retrieve/pii/S0950584916302269">"Just enough semantics: An information theoretic approach for IR-based software bug localization"</a></span>. <i><a href="Information_and_Software_Technology" title="Information and Software Technology">Information and Software Technology</a></i>. <b>93</b>: <span class="nowrap">45–</span>57. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.infsof.2017.08.012">10.1016/j.infsof.2017.08.012</a>.</cite></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><cite id="CITEREFMyers,_G._J.1979" class="citation book cs1"><a href="Glenford_Myers" title="Glenford Myers">Myers, G. J.</a> (1979). <i>The Art of Software Testing</i>. John Wiley and Sons.</cite></span>
</li>
<li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><cite id="CITEREFChenZhangGuoLi2013" class="citation journal cs1">Chen, Ting; Zhang, Xiao-song; Guo, Shi-ze; Li, Hong-yuan; Wu, Yue (2013-09-01). <span class="id-lock-subscription" title="Paid subscription required"><a rel="nofollow" class="external text" href="https://www.sciencedirect.com/science/article/pii/S0167739X12000398">"State of the art: Dynamic symbolic execution for automated test generation"</a></span>. <i>Future Generation Computer Systems</i>. Including Special sections: Cyber-enabled Distributed Computing for Ubiquitous Cloud and Network Services & Cloud Computing and Scientific Applications — Big Data, Scalable Analytics, and Beyond. <b>29</b> (7): <span class="nowrap">1758–</span>1773. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1016%2Fj.future.2012.02.006">10.1016/j.future.2012.02.006</a>. <a href="ISSN_(identifier)" class="mw-redirect" title="ISSN (identifier)">ISSN</a> <a rel="nofollow" class="external text" href="https://search.worldcat.org/issn/0167-739X">0167-739X</a>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite id="CITEREFChenHanYinZeng2022" class="citation book cs1">Chen, Ju; Han, Wookhyun; Yin, Mingjun; Zeng, Haochen; Song, Chengyu; Lee, Byoungyoung; Yin, Heng; Shin, Insik (2022). <a rel="nofollow" class="external text" href="https://www.usenix.org/conference/usenixsecurity22/presentation/chen-ju"><i>{SYMSAN}: Time and Space Efficient Concolic Execution via Dynamic Data-flow Analysis</i></a>. pp. <span class="nowrap">2531–</span>2548. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-939133-31-1</bdi>.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite id="CITEREFChangStreiffLin2008" class="citation book cs1">Chang, Walter; Streiff, Brandon; Lin, Calvin (2008-10-27). <a rel="nofollow" class="external text" href="https://doi.org/10.1145/1455770.1455778">"Efficient and extensible security enforcement using dynamic data flow analysis"</a>. <i>Proceedings of the 15th ACM conference on Computer and communications security</i>. CCS '08. New York, NY, USA: Association for Computing Machinery. pp. <span class="nowrap">39–</span>50. <a href="Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<a rel="nofollow" class="external text" href="https://doi.org/10.1145%2F1455770.1455778">10.1145/1455770.1455778</a>. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-1-59593-810-7</bdi>. <a href="S2CID_(identifier)" class="mw-redirect" title="S2CID (identifier)">S2CID</a> <a rel="nofollow" class="external text" href="https://api.semanticscholar.org/CorpusID:6888893">6888893</a>.</cite></span>
</li>
</ol></div></div>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Software_testing107" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Software_testing107" style="font-size:114%;margin:0 4em"><a href="Software_testing" title="Software testing">Software testing</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Test levels</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Acceptance_testing" title="Acceptance testing">Acceptance testing</a></li>
<li><a href="System_integration_testing" title="System integration testing">System integration testing</a></li>
<li><a href="System_testing" title="System testing">System testing</a></li>
<li><a href="Integration_testing" title="Integration testing">Integration testing</a></li>
<li><a href="Unit_testing" title="Unit testing">Unit testing</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Test types,<br>techniques,<br><a href="Software_testing_tactics" title="Software testing tactics">tactics</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><td colspan="2" class="navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="A/B_testing" title="A/B testing">A/B testing</a></li>
<li><a href="Benchmark_(computing)" title="Benchmark (computing)">Benchmark</a></li>
<li><a href="Compatibility_testing" title="Compatibility testing">Compatibility testing</a></li>
<li><a href="Concolic_testing" title="Concolic testing">Concolic testing</a></li>
<li><a href="Concurrent_testing" title="Concurrent testing">Concurrent testing</a></li>
<li><a href="Conformance_testing" title="Conformance testing">Conformance testing</a></li>
<li><a href="Continuous_testing" title="Continuous testing">Continuous testing</a></li>
<li><a href="Destructive_testing" title="Destructive testing">Destructive testing</a></li>
<li><a href="Development_testing" title="Development testing">Development testing</a></li>
<li><a href="Differential_testing" title="Differential testing">Differential testing</a></li>
<li><a href="Installation_testing" title="Installation testing">Installation testing</a></li>
<li><a href="Negative_testing" title="Negative testing">Negative testing</a></li>
<li><a href="Random_testing" title="Random testing">Random testing</a></li>
<li><a href="Regression_testing" title="Regression testing">Regression testing</a></li>
<li><a href="Security_testing" title="Security testing">Security testing</a></li>
<li><a href="Smoke_testing_(software)" title="Smoke testing (software)">Smoke testing (software)</a></li>
<li><a href="Software_performance_testing" title="Software performance testing">Software performance testing</a></li>
<li><a href="Stress_testing_(software)" title="Stress testing (software)">Stress testing</a></li>
<li><a href="Symbolic_execution" title="Symbolic execution">Symbolic execution</a></li>
<li><a href="Test_automation" title="Test automation">Test automation</a></li>
<li><a href="Usability_testing" title="Usability testing">Usability testing</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">[x]-box<br>style</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Black-box_testing" title="Black-box testing">Black-box testing</a>
<ul><li><a href="All-pairs_testing" title="All-pairs testing">All-pairs testing</a></li>
<li><a href="Exploratory_testing" title="Exploratory testing">Exploratory testing</a></li>
<li><a href="Fuzz_testing" class="mw-redirect" title="Fuzz testing">Fuzz testing</a></li>
<li><a href="Model-based_testing" title="Model-based testing">Model-based testing</a></li>
<li><a href="Scenario_testing" title="Scenario testing">Scenario testing</a></li></ul></li>
<li><a href="Grey-box_testing" class="mw-redirect" title="Grey-box testing">Grey-box testing</a></li>
<li><a href="White-box_testing" title="White-box testing">White-box testing</a>
<ul><li><a href="API_testing" title="API testing">API testing</a></li>
<li><a href="Mutation_testing" title="Mutation testing">Mutation testing</a></li>
<li><a href="Static_testing" class="mw-redirect" title="Static testing">Static testing</a></li></ul></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">See also</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Graphical_user_interface_testing" title="Graphical user interface testing">Graphical user interface testing</a></li>
<li><a href="Manual_testing" title="Manual testing">Manual testing</a></li>
<li><a href="Orthogonal_array_testing" title="Orthogonal array testing">Orthogonal array testing</a></li>
<li><a href="Pair_testing" title="Pair testing">Pair testing</a></li>
<li><a href="Soak_testing" title="Soak testing">Soak testing</a></li>
<li><a href="Software_reliability_testing" title="Software reliability testing">Software reliability testing</a></li>
<li><a href="Stress_testing" title="Stress testing">Stress testing</a></li>
<li><a href="Web_testing" title="Web testing">Web testing</a></li></ul>
</div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-05-23" href="https://en.wikipedia.org/wiki/?title=Dynamic_program_analysis&oldid=1291863679">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>